Projet GH-382 - Je cherche à convertir en SQL des query de filtre basé sur un système de "tags"
Ce projet a été initialement commencé dans une issue le 8 mars 2024.
Sur un modèle de données SQL qui implémente un système de tags
comme celui décrit ici, je souhaite pouvoir appliquer des filtres qui ressemblent à ceci :
- a.
tag_a or tag_b
- b.
tag_a and tag_b
- c.
tag_a and (not tag_b)
- d.
(tag_a and tag_b) or (tag_c and tag_d)
- ...
Voici à quels filtres (where
) SQL peuvent ressembler ces filtres :
- a.
WHERE contacts.tags && (SELECT ARRAY_AGG(id) FROM contact_tags WHERE name = ANY(ARRAY['tag_a', 'tag_b'])
- b.
WHERE contacts.tags @> (SELECT ARRAY_AGG(id) FROM contact_tags WHERE name = ANY(ARRAY['tag_a', 'tag_b'])
- c.
WHERE
(contacts.tags && (SELECT ARRAY_AGG(id) FROM contact_tags WHERE name = ANY(ARRAY['tag_a'])) AND
(NOT (contacts.tags && (SELECT ARRAY_AGG(id) FROM contact_tags WHERE name = ANY(ARRAY['tag_a'])))
- d.
WHERE
(contacts.tags && (SELECT ARRAY_AGG(id) FROM contact_tags WHERE name = ANY(ARRAY['tag_a', 'tag_b'])) OR
(contacts.tags && (SELECT ARRAY_AGG(id) FROM contact_tags WHERE name = ANY(ARRAY['tag_c', 'tag_d']))
Questions que je me pose :
- Existe-t-il un "langage" de query de tag sur lequel je pourrais me baser ?
- Existe-t-il un parser qui me permettrait de transformer ma query de filtre en SQL ?
Todo :
- [ ] Essayer de dresser une liste de langages de query, quelques idées où chercher :
- [ ] Des moteurs de recherche :
- [x] Google
- [x] Duckduckgo
- [ ] Algolia
- [x] Melisearch
- [ ] …
- [ ] Prometheus
- [x] Loki
- [ ] GitLab
- [x] GitHub
- [x] Jira
- [x] Lobster
- [ ] Des moteurs de recherche :
- [ ] Poster un billet de recherche sur
- [x] Subreddit Postgres => https://old.reddit.com/r/PostgreSQL/comments/1bb6qvj/need_advice_on_how_to_convert_a_filter_string/?
- [x] Subreddit Javascript => https://old.reddit.com/r/javascript/comments/1bb8rr3/askjs_need_advice_on_how_to_convert_a_filter/
- [ ] Stackoverflow
- [ ]
Subreddit programming- [ ] AskProgramming
- [x] Publier sur sklein.xyz :
Journaux liées à cette note :
Journal du mardi 13 août 2024 à 21:32
#iteration du Projet GH-382 - Je cherche à convertir en SQL des query de filtre basé sur un système de "tags".
J'ai enfin analysé la Merge Request qui m'a été envoyé par un ami 🤗 : https://github.com/stephane-klein/postgres-tags-model-poc/pull/9
6 mois plus tard, j'ai fini l'implémentation de la première version du "Query string javascript parser" : https://github.com/stephane-klein/postgres-tags-model-poc/commit/f0f363b78c136e8e67a38f95b5c627d874537949
Pour la coloration syntaxique des fichiers Peggy sous Neovim, j'utilise avec succès https://github.com/TheGrandmother/peggy-vim : https://github.com/stephane-klein/dotfiles/commit/20cba4ba646a0793f66f9b19788920a4ff1f1838
Journal du lundi 11 mars 2024 à 08:33
#iteration du Projet GH-382 - Je cherche à convertir en SQL des query de filtre basé sur un système de "tags".
Je vais essayer d'implémenter ce DSL dans https://github.com/stephane-klein/postgres-tags-model-poc/issues/8
Journal du dimanche 10 mars 2024 à 10:29
#iteration du Projet GH-382 - Je cherche à convertir en SQL des query de filtre basé sur un système de "tags".
J'ai rédigé la version Française du billet que je souhaite publier : https://a51nxj8cxk.joplinusercontent.com/shares/c0UzIdTp2nlP0H1R7I4o5F.
Version anglaise du billet : https://a51nxj8cxk.joplinusercontent.com/shares/qCbq5t9WA3o4xr8b5CgZjW.
Proposition de titre en FR : "Demande de conseils pour convertir une query filter string sur des tags en SQL, exemple "(tag1 and tag2) or tag3" en SQL"
Proposition de titre en EN : "Need advice on how to convert a filter string query on tags in SQL, for example "(tag1 and tag2) or tag3" in SQL?"
J'ai posté le billet sur https://old.reddit.com/r/PostgreSQL/comments/1bb6qvj/need_advice_on_how_to_convert_a_filter_string/? et aussi sur https://sklein.xyz/fr/posts/2024-03-10_demande-de-conseils-pour-convertir-une-query-filter-string-sur-des-tags-en-sql/
On m'a partagé Peggy qui me semble en effet, intéressant.
Journal du samedi 09 mars 2024 à 10:22
#iteration du Projet GH-382 - Je cherche à convertir en SQL des query de filtre basé sur un système de "tags".
#JaiLu Google Search Operators: The Complete List (44 Advanced Operators)
Je constate que le langage de query de Google support OR
, AND
, les (……)
… En résumé, toutes les fonctionnalités que je souhaite.
Dans l'article How to use advanced syntax on DuckDuckGo Search je comprends que le langage de query de DuckDuckGo supporte les fonctionnalités que je souhaite, mais avec une syntax intéressante, sans doute pratique, mais je la juge moins explicite que celle de Google.
J'ai lu la page Log queries de Loki et je ne la trouve pas adaptée à mon besoin. Cette syntax est trop puissante. Je souhaite quelque chose de plus limité, qui permette seulement d'effectuer des filtres basés sur des tags
.
J'ai lu la page Filtering projects de GitHub et je constate que ce langage de query est trop limité, ne correspond pas à mon besoin.
La syntax de recherche de Lobsters est trop limitée par rapport à mon besoin https://lobste.rs/search
Concernant Jira, j'ai commencé ma lecture sur cette page Use advanced search with Jira Query Language (JQL), j'ai ensuite lu :
Le "Jira Query Language (JQL)" est très puissant, même trop puissant par rapport à mon besoin.
J'ai lu la page Filtering de Meilisearch.
La syntaxe est puissante, intéressante.
Après avoir étudié les query search syntax de Google, Duckduckgo, Melisearch, Loki, GitHub, Jira, Lobster je constate que mon besoin est un peu spécifique, car je souhaite effectuer des filtrages seulement sur les lables.
Le moteur de syntaxe qui ressemble le plus à ce que je cherche est le langage de syntaxe de Google.
Mon objectif est de pouvoir appliquer des règles d'appartenance sur les tags
.